home *** CD-ROM | disk | FTP | other *** search
/ Steal This CD / steal_this_cd.iso / Chapter 03 - Hacking People, Places, and Things / Juice22Setup.exe / plugins / description_links.py
Text File  |  2005-10-22  |  2KB  |  66 lines

  1. import wx, webbrowser, logging
  2. from sgmllib import SGMLParser
  3.  
  4. log = logging.getLogger('Juice')
  5. plugin_name = __name__.split('.')[-1]
  6.  
  7. class Plugin(object):
  8.  
  9.     def __init__(self):
  10.         log.info("Loading plugin: %s" % plugin_name)
  11.         self.rclickmap = {}
  12.  
  13.     def hook_download_right_click(self,menu,enclosure):
  14.         return self.hook_episode_right_click(menu,enclosure)
  15.     
  16.     def hook_episode_right_click(self,menu,enclosure):
  17.         self.rclickmap = {}
  18.         if hasattr(enclosure,"description"):
  19.             parser = URLLister()
  20.             try:
  21.                 parser.feed(enclosure.description)
  22.                 parser.close()
  23.                 if len(parser.urls) > 0:
  24.                     submenu = wx.Menu()
  25.                     for (text,url) in parser.urls:
  26.                         if url == enclosure.url:
  27.                             continue
  28.                         id = wx.NewId()
  29.                         submenu.Append(id,text)
  30.                         wx.EVT_MENU(menu, id, self.launch_browser)
  31.                         self.rclickmap[id] = url
  32.                     if submenu.GetMenuItemCount() > 0:
  33.                         id = wx.NewId()
  34.                         menu.AppendMenu(id,"Links",submenu)
  35.             except:
  36.                 pass
  37.             
  38.     def launch_browser(self,event):
  39.         if self.rclickmap.has_key(event.GetId()):
  40.             webbrowser.open(self.rclickmap[event.GetId()])
  41.  
  42. class URLLister(SGMLParser):
  43.     def reset(self):
  44.         SGMLParser.reset(self)
  45.         self.urls = []
  46.         self.achars = ""
  47.         self.url = ""
  48.         self.in_a = False
  49.         
  50.     def start_a(self, attrs):
  51.         href = [v for k, v in attrs if k=='href']
  52.         if href:
  53.             self.url = href[0]
  54.             self.in_a = True
  55.             
  56.     def handle_data(self, text):
  57.         if self.in_a:
  58.             self.achars += text
  59.         
  60.     def end_a(self):
  61.         self.urls.append((self.achars,self.url))
  62.         self.achars = ""
  63.         self.url = ""
  64.         self.in_a = False
  65.  
  66.